package Schiffe;

import Spielfeld.Spielfeld;

public class Phantom extends Schiff
{
	private boolean gesetzt;
	
	public Phantom(int x, int y, int groesse, boolean horizontal)
	{
		super(x, y, groesse, horizontal);
		gesetzt = false;
	}
	
	public void setzeSchiffAufFeld (Spielfeld feld)
	{
		for (int i = 0; i < groesse; i++)
		{
			if (horizontal)
			{
				if (x + i < feld.getFeldGroesse())
					feld.setzeFeldStatus(x + i, y, Spielfeld.STATUS_PHANTOM);
			}
			else
			{
				if (y + i < feld.getFeldGroesse())
					feld.setzeFeldStatus(x, y + i, Spielfeld.STATUS_PHANTOM);
			}
		}
	}
	
	public boolean positionGueltig(Spielfeld feld)
	{
		if (horizontal)
			if (this.x + this.groesse > feld.getFeldGroesse())
				return false;
		if (!horizontal)
			if (this.y + this.groesse > feld.getFeldGroesse())
				return false;
		
		int iterX = this.x;
		int iterY = this.y;
		
		if (horizontal)
			for (iterX = this.x; iterX < this.x + this.groesse; iterX++)
			{
				if (feld.getFeldStatus(iterX, iterY) == Spielfeld.STATUS_SCHIFF ||
					feld.getFeldStatus(iterX + 1, iterY) == Spielfeld.STATUS_SCHIFF ||
					feld.getFeldStatus(iterX - 1, iterY) == Spielfeld.STATUS_SCHIFF ||
					feld.getFeldStatus(iterX, iterY + 1) == Spielfeld.STATUS_SCHIFF ||
					feld.getFeldStatus(iterX, iterY - 1) == Spielfeld.STATUS_SCHIFF)
					return false;
			}
		
		if (!horizontal)
			for (iterY = this.y; iterY < this.y + this.groesse; iterY++)
			{
				if (feld.getFeldStatus(iterX, iterY) == Spielfeld.STATUS_SCHIFF ||
					feld.getFeldStatus(iterX + 1, iterY) == Spielfeld.STATUS_SCHIFF ||
					feld.getFeldStatus(iterX - 1, iterY) == Spielfeld.STATUS_SCHIFF ||
					feld.getFeldStatus(iterX, iterY + 1) == Spielfeld.STATUS_SCHIFF ||
					feld.getFeldStatus(iterX, iterY - 1) == Spielfeld.STATUS_SCHIFF)
					return false;
			}
		return true;
	}
	
	public void setzeHorizontal (boolean wert)
	{
		horizontal = wert;
	}
	
	public void setzePhantom()
	{
		gesetzt = true;
	}

	public boolean getGesetzt() { return gesetzt; }
}
